package com.xbongbong.pay.platform.wechatpay.pojo.response.partner;

import com.alibaba.fastjson.annotation.JSONField;
import com.xbongbong.pay.platform.wechatpay.pojo.response.WeChatBaseResponse;
import lombok.Getter;
import lombok.Setter;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author 魏荣杰
 * @date 2021/2/20 13:40
 * @since
 * @version
 */
@Setter
@Getter
public class WeChatPayOrderNoticeResponse extends WeChatBaseResponse {
    private static final long serialVersionUID = 6134606383806678469L;
    /**
     * 通知的唯一ID
     * 示例值：EV-2018022511223320873
     */
    @NotBlank
    @Size(min = 1, max = 32)
    private String id;
    /**
     * 通知创建的时间，遵循rfc3339标准格式，格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE，YYYY-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss.表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
     * 示例值：2015-05-20T13:29:35+08:00
     */
    @NotBlank
    @Size(min = 1, max = 16)
    @JSONField(name = "create_time")
    private String createTime;
    /**
     * 通知的类型，支付成功通知的类型为TRANSACTION.SUCCESS
     * 示例值：TRANSACTION.SUCCESS
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "event_type")
    private String eventType;
    /**
     * 通知的资源数据类型，支付成功通知为encrypt-resource
     * 示例值：encrypt-resource
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "resource_type")
    private String resourceType;

    /**
     * 回调摘要
     * 示例值：支付成功
     */
    @NotBlank
    @Size(min = 1, max = 64)
    private String summary;

    /**
     * 通知资源数据
     * json格式，见示例
     */
    @NotNull
    @Valid
    private Resource resource;

    @Setter
    @Getter
    public static class Resource {

        /**
         * 对开启结果数据进行加密的加密算法，目前只支持AEAD_AES_256_GCM
         * 示例值：AEAD_AES_256_GCM
         */
        @NotBlank
        @Size(min = 1, max = 32)
        private String algorithm;

        /**
         * Base64编码后的开启/停用结果数据密文
         * 示例值：sadsadsadsad
         */
        @NotBlank
        @Size(min = 1, max = 1048576)
        private String ciphertext;
        /**
         * 附加数据
         * 示例值：fdasfwqewlkja484w
         */
        @Size(min = 1, max = 16)
        @JSONField(name = "associated_data")
        private String associatedData;
        /**
         * 原始回调类型，为transaction
         * 示例值：transaction
         */
        @NotBlank
        @Size(min = 1, max = 16)
        @JSONField(name = "original_type")
        private String originalType;
        /**
         * 加密使用的随机串
         * 示例值：fdasflkja484w
         */
        @NotBlank
        @Size(min = 1, max = 16)
        private String nonce;
    }
}
